package com.micro.user.dto;

import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 用户信息DTO
 * 
 * @author micro
 * @since 1.0.0
 */
@Data
public class UserInfoDTO {

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 用户名
     */
    private String username;

    /**
     * 真实姓名
     */
    private String realName;

    /**
     * 身份证号（脱敏）
     */
    private String idCardNumber;

    /**
     * 手机号（脱敏）
     */
    private String phoneNumber;

    /**
     * 用户类型
     */
    private Integer userType;

    /**
     * 用户类型描述
     */
    private String userTypeDesc;

    /**
     * 状态
     */
    private Boolean active;

    /**
     * 注册时间
     */
    private LocalDateTime registrationTime;

    /**
     * 最后登录时间
     */
    private LocalDateTime lastLoginTime;

    /**
     * 余额
     */
    private BigDecimal balance;

    /**
     * 乘客数量
     */
    private Integer passengerCount;

    /**
     * 构造函数
     */
    public UserInfoDTO() {
    }

    /**
     * 获取脱敏的身份证号
     */
    public String getIdCardNumber() {
        if (idCardNumber == null || idCardNumber.length() < 8) {
            return idCardNumber;
        }
        return idCardNumber.substring(0, 4) + "****" + idCardNumber.substring(idCardNumber.length() - 4);
    }

    /**
     * 获取脱敏的手机号
     */
    public String getPhoneNumber() {
        if (phoneNumber == null || phoneNumber.length() < 7) {
            return phoneNumber;
        }
        return phoneNumber.substring(0, 3) + "****" + phoneNumber.substring(phoneNumber.length() - 4);
    }

    /**
     * 获取用户类型描述
     */
    public String getUserTypeDesc() {
        if (userTypeDesc != null) {
            return userTypeDesc;
        }
        
        if (userType == null) {
            return "未知";
        }
        
        switch (userType) {
            case 0: return "普通用户";
            case 1: return "学生";
            case 2: return "特殊群体";
            case 3: return "管理员";
            default: return "未知";
        }
    }

    /**
     * 判断是否为VIP用户（余额大于1000）
     */
    public boolean isVipUser() {
        return balance != null && balance.compareTo(new BigDecimal("1000")) > 0;
    }

    /**
     * 判断是否为新用户（注册时间小于30天）
     */
    public boolean isNewUser() {
        if (registrationTime == null) {
            return false;
        }
        LocalDateTime thirtyDaysAgo = LocalDateTime.now().minusDays(30);
        return registrationTime.isAfter(thirtyDaysAgo);
    }
}
